# 控制结构案例

# 1. 条件语句（if, elif, else）

age = 18

# 基本的 if 语句
if age >= 18:
    print("你是成年人。")
else:
    print("你是未成年人。")

# 使用 elif 进行多个条件判断
score = 85

if score >= 90:
    print("成绩优秀！")
elif score >= 75:
    print("成绩良好。")
elif score >= 60:
    print("成绩合格。")
else:
    print("成绩不及格。")

# 2. 循环语句

# 使用 for 循环遍历一个列表
fruits = ["苹果", "香蕉", "橙子", "葡萄"]

print("使用 for 循环遍历水果列表：")
for fruit in fruits:
    print(fruit)

# 使用 while 循环打印数字
counter = 1
print("使用 while 循环打印数字（1 到 5）：")
while counter <= 5:
    print(counter)
    counter += 1  # 增加计数器

# 3. 控制循环的语句

# 使用 break 跳出循环
print("使用 break 跳出循环：")
for i in range(1, 11):
    if i == 6:
        print("到达 6，跳出循环")
        break
    print(i)

# 使用 continue 跳过当前循环
print("使用 continue 跳过当前循环：")
for i in range(1, 6):
    if i == 3:
        print("跳过 3")
        continue
    print(i)

# 使用 pass 占位符，通常用于空的代码块（不执行任何操作）
print("使用 pass 占位符：")
for i in range(1, 4):
    if i == 2:
        pass  # 暂时不做任何操作
        print("执行 pass，暂时不做任何操作")
    else:
        print(i)

# 4. 嵌套循环与条件语句

# 使用嵌套 if 语句和循环打印一个乘法表
print("打印 1 到 5 的乘法表：")
for i in range(1, 6):
    for j in range(1, 6):
        print(f"{i} * {j} = {i * j}", end="\t")
    print()  # 换行


# 5. match-case 语句（模式匹配）

def evaluate_grade(grade):
    match grade:
        case 'A':
            print("成绩优异，奖励！")
        case 'B':
            print("成绩良好，继续努力！")
        case 'C':
            print("成绩及格，再接再厉！")
        case 'D':
            print("成绩不及格，考虑补考。")
        case 'F':
            print("成绩不及格，必须重修！")
        case _:
            print("无效成绩，输入有误。")


# 测试 evaluate_grade 函数
evaluate_grade('B')  # 输出: 成绩良好，继续努力！
evaluate_grade('D')  # 输出: 成绩不及格，考虑补考。
evaluate_grade('X')  # 输出: 无效成绩，输入有误。


# 使用 match-case 进行数值范围匹配
def categorize_age(age):
    match age:
        case age if age < 13:
            print("你是儿童。")
        case age if 13 <= age < 18:
            print("你是青少年。")
        case age if 18 <= age < 60:
            print("你是成年人。")
        case age if age >= 60:
            print("你是老年人。")
        case _:
            print("输入的年龄无效。")


# 测试 categorize_age 函数
categorize_age(8)  # 输出: 你是儿童。
categorize_age(16)  # 输出: 你是青少年。
categorize_age(45)  # 输出: 你是成年人。
categorize_age(70)  # 输出: 你是老年人。
categorize_age(-5)  # 输出: 输入的年龄无效。

# 代码讲解：
# 1. 条件语句 (if、elif、else)：
#   ○ 根据条件判断程序的执行路径。例如，根据年龄判断是否是成年人，根据分数判断成绩等级等。
#   ○ if 用于条件判断，elif 用于多个条件的判断，else 是条件不满足时的默认执行路径。
# 2. 循环语句 (for 和 while)：
#   ○ for 用于遍历可迭代对象（如列表、范围、字符串等）。
#   ○ while 用于在条件满足时重复执行某段代码，直到条件不再满足为止。
# 3. 控制循环的语句：
#   ○ break 用于跳出循环，通常用在某个条件满足时结束循环。
#   ○ continue 用于跳过当前循环的剩余部分，直接进入下一次循环。
#   ○ pass 用作占位符，通常用于空代码块，表示“什么也不做”，但是结构上需要保持空代码块的存在。
# 4. 嵌套循环与条件语句：
#   ○ 可以将循环和条件语句嵌套使用，例如在打印乘法表时，使用两个嵌套的 for 循环和 if 条件判断。
# 5. match-case语句：
#   a. 基本的 match-case 用法：
#     ■ match 关键字用于指定要匹配的变量或值。
#     ■ case 用于指定匹配的模式，可以是具体的值或条件表达式。
#     ■ case _ 是一个“默认”匹配，类似于其他语言中的 default，用于捕获所有不符合前面 case 的情况。
#   b. 数值范围的匹配：
#     ■ match 还支持通过条件表达式（例如 age if age < 13）来匹配特定范围的值。
#     ■ 这使得 match-case 结构非常灵活，可以处理更复杂的条件。
#   c. 应用场景：
#     ■ match-case 比传统的 if-elif-else 更简洁且可读性更高，特别是当需要匹配多个不同条件时。
#     ■ 它尤其适用于需要匹配复杂数据结构、枚举类型或进行更细致模式匹配的场景。